＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                        PC-FXGAオーサリングソフトウェア
                 『ＧＭＡＫＥＲ』スタータキットプラス(Ver.1.0)
                         ”ＭＯＵＳＥＬＩＢ．Ａ”の解説

                                        日本電気ホームエレクトロニクス株式会社
                                                            １９９６年４月８日

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

目次

第１章  マウスライブラリ概要
１．１  マウスライブラリのセグメント

第２章  マウス制御関数
２．１  マウス対応の reset_check の初期化          init_mouse_reset_check
２．２  マウス＋パッドの初期化                     init_get_mouse_pad
２．３  マウスのみの初期化                         init_get_mouse
２．４  マウス＋パッドのデータの取得               get_mouse_pad
２．５  マウスのみのデータの取得                   get_mouse
２．６  マウスが接続されているかどうかを取得       get_mouse_mode
２．７  マウスの移動量、ボタンの状態の取得         mouse_getdt
２．８  マウスカーソルの位置の取得                 mouse_curgt
２．９  マウスカーソルの位置の設定                 mouse_curst
２．10  マウスの移動範囲の設定                     mouse_limit
２．11  マウスの感度の設定                         mouse_mickey

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第１章  マウスライブラリ概要

外部入力装置であるマウスを制御するライブラリです。

本マウスライブラリを使用する場合は、マウスは本体のパッド端子かまたはマルチタッ
プの１番端子に接続して下さい。マルチタップの２番端子以降には対応していません。

また、マルチタップの１番端子にマウスを接続した場合、そのマウスだけが有効になり
２番端子以降に接続した機器は無効になります。

マウスライブラリはVLIB.Aの上位ライブラリになります。マウスライブラリを使用する
時は、VLIB.Aもリンクして下さい。

■１．１  マウスライブラリのセグメント

マウスライブラリ mouselib.a は、以下のセグメントに配置されます。

属性            セグメント名称
コード部        mou_code
データ部        mou_data
ＢＳＳ部        無し
ゼロページ部    mou_zero

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第２章  マウス制御関数

■２．１  マウス対応の reset_check の初期化

《名称》
   init_mouse_reset_check

《形式》
   #inclide <mouse.h>
   void init_mouse_reset_check(int padid,short delay);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #padid,ra0
   mov.h #delay,ra1
   call init_mouse_reset_check

《解説》
   init_mouse_reset_check は reset_check を初期化します。

   標準ライブラリ VLIB.A で用意されている init_reset_check と同様の機能を提供し
   ます。

   int padid には標準６ボタンパッドが接続されていた場合にリセットが有効な全ての
   パッドをビットで指定します。pad00 〜 pad05 は bit0 〜 5 に、pad10 〜 pad15
   は bit8 〜 13 に対応しています。

   short delay には、ディレイド・リセットの待ち時間を reset_check の呼び出し回
   数で指定します。

   init_reset_check はマウスには対応していませんので、マウス対応を行う場合には
   init_mouse_reset_check を使用して下さい。

《関連事項》
   int reset_check(void);
   void init_reset_check(int padid,short delay);

《注意》
   マウスライブラリ MOUSELIB.A を使用する場合は、init_reset_check は使用しない
   で下さい。誤って init_reset_check を使用すると reset_check が誤った結果を返
   してしまうので、マウスを動かしただけでリセットされてしまう等の誤動作を引き起
   こします。

   この関数を使用する場合は get_mouse または get_mouse_pad を呼び出して、パッド
   かマウスかの自動判定を行った後で呼び出して下さい。自動判定を行う前に呼び出す
   とマウスを動かしただけでリセットされてしまう等の誤動作を引き起こします。

《プログラム例》
   #include <mouse.h>
   :
   /* マウス／パッドの自動判定を行う為の get_mouse_pad 呼び出しの準備 */
   init_get_mouse_pad(0,1);

   /* 最初の無意味データを破棄 */
   get_pad();

       :　　 /* 最低、1 V-Sync の待ち合わせが必要 */

   /* マウス／パッドの自動判定を行う */
   get_mouse_pad();

   /* reset_check の初期化。パッド１のみ６０回でリセット */
   init_mouse_reset_check(0x0001,60);


■２．２  マウス＋パッドの初期化

《名称》
   init_get_mouse_pad

《形式》
   #inclide <mouse.h>
   void init_get_mouse_pad(int padid,short delay);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #padid,ra0
   mov.h #delay,ra1
   call init_get_mouse_pad

《解説》
   init_get_mouse_pad は、get_mouse_pad 、get_mouse を初期化し、init_get_pad と
   init_get_mouse を実行します。

   int padid 、short delay に与える値と意味は、init_mouse_reset_check と同じで
   す。

   マウスの移動感度(ＭＩＣＫＥＹ値)を 400 に、マウスカーソルの位置を ( 0 , 0 )
   に、マウスカーソル移動範囲を ( 0 , 0 ) - ( 511 , 511 ) に初期化します。

   get_mouse_pad 、get_mouse を使用する場合には、必ず init_get_mouse_pad で初期
   化を行って下さい。

《関連事項》
   void init_mouse_reset_ckeck(int padid,short delay);
   void init_get_pad(void);
   void init_get_mouse(int padid,short delay);
   void get_mouse_pad(void);
   void get_mouse(void);

《プログラム例》
   #include <mouse.h>
   :
   /* マウス／パッドの自動判定を行う為の get_mouse_pad 呼び出しの準備 */
   init_get_mouse_pad(0x0001,60);

   /* 最初の無意味データを破棄 */
   get_pad();

       :　　 /* 最低、1 V-Sync の待ち合わせが必要 */

   /* マウス／パッドの自動判定を行う */
   get_mouse_pad();

   /* reset_check の初期化。パッド１のみ６０回でリセット */
   init_mouse_reset_check(0x0001,60);


■２．３  マウスのみの初期化

《名称》
   init_get_mouse

《形式》
   #inclide <mouse.h>
   void init_get_mouse(int padid,short delay);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #padid,ra0
   mov.h #delay,ra1
   call init_get_mouse

《解説》
   init_get_mouse は get_mouse を初期化し init_mouse_reset_check を実行します。

   int padid 、short delay に与える値と意味は、init_mouse_reset_check と同じで
   す。

   マウス関係で初期化される内容は init_get_mouse_pad と同じです。

   get_mouse を使用する場合には、必ず init_get_mouse で初期化を行って下さい。

   init_get_mouse は init_get_mouse_pad と違い、マウス関係の初期化のみでパッド
   関係の初期化は行いません。

《関連事項》
   void init_mouse_reset_ckeck(int padid,short delay);
   void init_get_mouse(int padid,short delay);
   void get_mouse(void);


■２．４  マウス＋パッドのデータの取得

《名称》
   get_mouse_pad

《形式》
   #inclide <mouse.h>
   void get_mouse_pad(void);

《アセンブラ形式》
   include "mouse.sh"
   call get_mouse_pad

《解説》
   get_mouse_pad は、get_pad と get_mouse を実行します。

   get_mouse_pad を呼び出す事によりマウスのデータが読み込まれます。従って、この
   関数を呼び出す事により、マウスの移動量、ボタンの状態、マウスカーソルの位置、
   マウスが接続されているかどうかの状態が更新されます。

《注意》
   この関数は get_pad を呼び出しますので、この関数を連続して呼び出す場合は最低
   1 V-Sync 程度（1/60秒程度）の間隔を空けて呼んで下さい。同様に、get_pad と
   get_mouse_pad を連続して呼び出す場合も 1 V-Sync 程度の間隔が必要です。

   初期化直後（プログラム起動直後も含む）の最初の１回目の get_pad は、無意味な
   データを読み込みますので、初期化直後には get_pad を１回だけ呼び出して無意味
   データを破棄（空読み）する必要があります。また、最初の無意味なデータの破棄の
   為の get_pad の呼び出しに連続して get_mouse_pad を呼び出す際には、get_pad と
   get_mouse_pad の間に 1 V-Sync 程度の間隔が必要です。

   get_mouse_pad を使用する場合には、必ず init_get_mouse_pad で初期化を行って下
   さい。

《関連事項》
   void init_get_mouse_pad(int padid,short delay);
   void get_pad(void);
   void get_mouse(void);

《プログラム例》
   #include <mouse.h>
   :
   init_get_mouse_pad(0x0001,60);
   get_pad();
       :　　 /* 最低、1 V-Sync の待ち合わせが必要 */
   get_mouse_pad();
   init_mouse_reset_check(0x0001,60);
   while(1) {
       :　　 /* 最低、1 V-Sync の待ち合わせが必要 */
       get_mouse_pad(); /* マウスデータの取得 */
       if (get_mouse_mode() & 1) {  /* パッド１がマウスなら */
           if (mouse_getdt(0) & MOUSE_RSW) break; /* 右ボタンで終了 */
       } else { /* パッド１がマウスでないなら */
           if (pad00.KD_DAT & KP_1) break; /* パッドの１ボタンで終了 */
       }
   }


■２．５  マウスのみのデータの取得

《名称》
   get_mouse

《形式》
   #inclide <mouse.h>
   void get_mouse(void);

《アセンブラ形式》
   include "mouse.sh"
   call get_mouse

《解説》
   get_mouse は、事前に呼び出された get_pad で得たデータを元に、マウスの状態を
   更新します。従って、この関数を呼び出す事により、マウスの移動量、ボタンの状態
   マウスカーソルの位置、マウスが接続されているかどうかの状態が更新されます。

   この関数を呼び出す場合は、毎回、事前に get_pad を呼び出しておく必要がありま
   す。get_pad を呼び出さずに２回以上続けて get_mouse を呼び出すと、同じデータ
   を元にマウスの状態を更新しようとするので、マウスの動作が不安定になります。

   get_mouse を使用する場合には、必ず init_get_mouse で初期化を行って下さい。

   get_pad と get_mouse を続けて呼び出す場合は、この２つを連続して呼び出す関数
   の get_mouse_pad を使用するのが良いでしょう。

《関連事項》
   void init_get_mouse_pad(int padid,short delay);
   void get_pad(void);
   void get_mouse_pad(void);

《プログラム例》
   #include <mouse.h>
   :
   init_get_mouse_pad(0x0001,60);
   get_pad();
       :　　 /* 最低、1 V-Sync の待ち合わせが必要 */
   get_mouse_pad();
   init_mouse_reset_check(0x0001,60);
   while(1) {
       :  /* 最低、1 V-Sync の待ち合わせが必要 */
       get_pad(); /* パッドのデータの取得 */
       get_mouse(); /* 取得したパッドデータを元にマウスデータの更新 */
       if (get_mouse_mode() & 1) {  /* パッド１がマウスなら */
           if (mouse_getdt(0) & MOUSE_RSW) break; /* 右ボタンで終了 */
       } else { /* パッド１がマウスでないなら */
           if (pad00.KD_DAT & KP_1) break; /* パッドの１ボタンで終了 */
       }
   }


■２．６  マウスが接続されているかどうかを取得

《名称》
   get_mouse_mode

《形式》
   #inclide <mouse.h>
   int get_mouse_mode(void);

《アセンブラ形式》
   include "mouse.sh"
   call get_mouse_mode

《解説》
   get_mouse_mode は、パッド端子にマウスが接続されているかどうかを調べます。

   この関数が有効になるのは、get_mouse か get_mouse_pad を呼び出した後ですので
   get_mouse か get_mouse_pad を呼び出す前には使用できません。

   get_mouse_mode が返す値は、以下のようになります。

   パッド端子１ | パッド端子２ | 返される値
   -------------+--------------+-----------
   パッドまたは | パッドまたは |     0
   マルチタップ | マルチタップ |
   -------------+--------------+-----------
      マウス    | パッドまたは |     1
                | マルチタップ |
   -------------+--------------+-----------
   パッドまたは |    マウス    |     2
   マルチタップ |              |
   -------------+--------------+-----------
      マウス    |    マウス    |     3

《関連事項》
   void get_pad(void);
   void get_mouse_pad(void);
   void get_mouse(void);

《注意》
   get_mouse_mode でマウスが接続されていると返された場合、そのパッド端子の状態
   を示す get_pad 用データ struct KEYDATA の値は無効になります。値を参照しない
   ようにして下さい。

   例えば、パッド端子２にマウスが接続されていた場合 struct KEYDATA pad10,pad11,
   pad12,pad13,pad14,pad15 のデータの値は無効になります。
   同様に、パッド端子１にマウスが接続されていた場合 struct KEYDATA pad00,pad01,
   pad02,pad03,pad04,pad05 のデータの値は無効になります。

《プログラム例》
   #include <mouse.h>
   :
   init_get_mouse_pad(0x0001,60);
   get_pad();
       :　　 /* 最低、1 V-Sync の待ち合わせが必要 */
   get_mouse_pad();
   init_mouse_reset_check(0x0001,60);
   while(1) {
       :  /* 最低、1 V-Sync の待ち合わせが必要 */
       get_pad(); /* パッドのデータの取得 */
       get_mouse(); /* 取得したパッドデータを元にマウスデータの更新 */
       if (get_mouse_mode() & 1) {  /* パッド１がマウスなら */
           if (mouse_getdt(0) & MOUSE_RSW) break; /* 右ボタンで終了 */
       } else { /* パッド１がマウスでないなら */
           if (pad00.KD_DAT & KP_1) break; /* パッドの１ボタンで終了 */
       }
       if (get_mouse_mode() & 2) {  /* パッド２がマウスなら */
           if (mouse_getdt(1) & MOUSE_RSW) break; /* 右ボタンで終了 */
       } else { /* パッド２がマウスでないなら */
           if (pad10.KD_DAT & KP_1) break; /* パッドの１ボタンで終了 */
       }
   }


■２．７  マウスの移動量、ボタンの状態の取得

《名称》
   mouse_getdt

《形式》
   #inclide <mouse.h>
   u_int mouse_getdt(int no);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #no,ra0
   call mouse_getdt

《解説》
   mouse_getdt は、no で指定したマウスの、ボタンの状態とマウスの移動量を返しま
   す。

   パッド端子１のマウスを調べる場合は no に 0 を、パッド端子２のマウスを調べる
   場合は no に 1 を指定します。

   ボタンの状態と移動量は、以下のように返されます。

   Bit
   31  30  29     〜     15  14     〜     0
   R | L | XXXXXXXXXXXXXXX | YYYYYYYYYYYYYYY
   |   |    |                 |
   |   |    |                 +--- Ｙ方向の移動量 -16384 〜 -1 , 0 , 1 〜 16383
   |   |    +--------------------- Ｘ方向の移動量 -16384 〜 -1 , 0 , 1 〜 16383
   |   +-------------------------- 左ボタン 0 = 押していない , 1 = 押している
   +------------------------------ 右ボタン 0 = 押していない , 1 = 押している

   Ｘ方向、Ｙ方向の移動量の最上位ビットは符号ビットになっていますので、Ｘ方向が
   正の数なら右に、負の数なら左に動いています。Ｙ方向が正の数なら下に、負の数な
   ら上に動いています。

   ボタンの状態とマウス移動量は get_mouse_pad などの、マウス／パッドのデータ取
   得を行った場合にのみ更新されますので、get_mouse_pad 等を呼び出さずに繰り返し
   て mouse_getdt を呼び出した場合は毎回同じ値が返されます。

   マウスの移動量は mouse_mickey の感度設定の影響を受けます。

   no に指定した番号のパッド端子にマウスが接続されていない場合は、ボタンは常に
   押されておらず、マウスは常に移動していないものとして動作します。

   no に不正な値を指定した場合には 0xffffffff($ffffffff) が返されます。

《関連事項》
   void get_mouse_pad(void);
   int mouse_mickey(u_short mickey,int no);


■２．８  マウスカーソルの位置の取得

《名称》
   mouse_curgt

《形式》
   #inclide <mouse.h>
   u_int mouse_curgt(int no);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #no,ra0
   call mouse_curgt

《解説》
   mouse_curgt は、no で指定したマウスのマウスカーソルの現在位置を返します。

   パッド端子１のマウスを調べる場合は no に 0 を、パッド端子２のマウスを調べる
   場合は no に 1 を指定します。

   マウスカーソルの現在位置は、以下のように返されます。

   Bit
   31      〜     16  15     〜      0
   XXXXXXXXXXXXXXXX | YYYYYYYYYYYYYYYY
    |                  |
    |                  +--- Ｙ方向の位置 0 〜 65535
    +---------------------- Ｘ方向の位置 0 〜 65535

   位置は 0 〜 65535 の値で返されます。但し、mouse_limit で移動範囲を限定してい
   る場合や、init_get_mouse_pad 等で初期化直後は、限定された範囲の値が返されま
   す。

   no に指定した番号のパッド端子にマウスが接続されていない場合でも、マウスカー
   ソルの位置が返されます。

   no に不正な値を指定した場合には 0xffffffff($ffffffff) が返されます。

《関連事項》
   void init_get_mouse_pad(int padid,short delay);
   int mouse_curst(int posx,int posy,int no);
   int mouse_limit(int xsta,int ysta,int xend,int yend,int no);


■２．９  マウスカーソルの位置の設定

《名称》
   mouse_curst

《形式》
   #inclide <mouse.h>
   int mouse_curst(int posx,int posy,int no);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #posx,ra0
   mov.w #posy,ra1
   mov.w #no,ra2
   call mouse_curst

《解説》
   mouse_curst は、no で指定したマウスのマウスカーソルの現在位置を変更します。

   posx には、変更したいマウスカーソルのＸ方向の位置を指定します。

   posy には、変更したいマウスカーソルのＹ方向の位置を指定します。

   posx 、posy それぞれ、0 〜 65535 を指定するとカーソル位置が変更され、-1 を指
   定すると位置を変更しません。従って、片方だけ -1 を指定すると、Ｘ方向だけ、Ｙ
   方向だけの変更が可能になります。

   mouse_limit で指定された範囲を超えた位置に移動させると、移動範囲の限界の位置
   に移動します。

   パッド端子１のマウスを変更する場合は no に 0 を、パッド端子２のマウスを変更
   する場合は no に 1 を指定します。

   no に指定した番号のパッド端子にマウスが接続されていない場合でも、マウスカー
   ソルの位置が変更されます。

   カーソル位置の変更が成功すると 0 が返されます。

   no に不正な値を指定した場合には -1 が返されます。

《関連事項》
   int mouse_curgt(int posx,int posy,int no);
   int mouse_limit(int xsta,int ysta,int xend,int yend,int no);


■２．10  マウスの移動範囲の設定

《名称》
   mouse_limit

《形式》
   #inclide <mouse.h>
   int mouse_limit(int xsta,int ysta,int xend,int yend,int no);

《アセンブラ形式》
   include "mouse.sh"
   mov.w #xsta,ra0
   mov.w #ysta,ra1
   mov.w #xend,ra2
   mov.w #yend,ra3
   mov.w #no,ra4
   call mouse_limit

《解説》
   mouse_limit は、no で指定したマウスのマウスカーソルの移動範囲を設定します。

   xsta 、xend には、変更したいマウスカーソルのＸ方向の移動範囲を指定します。

   ysta 、yend には、変更したいマウスカーソルのＹ方向の移動範囲を指定します。

   xsta 、xend 、ysta 、yend それぞれ、0 〜 65535 を指定するとカーソル移動範囲
   が変更され、-1 を指定すると移動範囲を変更しません。従って、どれかに -1 を指
   定すると、Ｘ方向だけ、Ｙ方向だけ、始点だけ、終点だけの変更が可能になります。

   xsta と xend 、ysta と yend の大小関係に制限はありません。従って、以下の４つ
   の例はすべて同じ結果となります。

   mouse_limit(  0,  0,200,200,0);
   mouse_limit(200,  0,  0,200,0);
   mouse_limit(  0,200,200,  0,0);
   mouse_limit(200,200,  0,  0,0);

   パッド端子１のマウスを変更する場合は no に 0 を、パッド端子２のマウスを変更
   する場合は no に 1 を指定します。

   no に指定した番号のパッド端子にマウスが接続されていない場合でも、マウスカー
   ソルの移動範囲が変更されます。

   カーソル移動範囲の変更が成功すると 0 が返されます。

   no に不正な値を指定した場合には -1 が返されます。

   現在のマウスカーソルが、新しい移動範囲から超えた位置にあった場合、マウスカー
   ソルの位置は移動範囲内に強制的に移動させられます。


■２.11  マウスの感度の設定

《名称》
   mouse_mickey

《形式》
   #inclide <mouse.h>
   int mouse_mickey(u_short mickey,int no);

《アセンブラ形式》
   include "mouse.sh"
   mov.h #mickey,ra0
   mov.w #no,ra1
   call mouse_mickey

《解説》
   mouse_mickey は、no で指定したマウスの移動感度を設定します。

   mickey には、マウス感度（MICKEY = Ｍouse Ｉnch Ｃount ＫＥＹ）を指定します。

   マウス感度 mickey は 4 〜 65535 の値を指定し、数値が大きくなると敏感になりま
   す。

   パッド端子１のマウスを変更する場合は no に 0 を、パッド端子２のマウスを変更
   する場合は no に 1 を指定します。

   マウスの移動感度は、mouse_getdt で返される移動量、マウスカーソルの位置の移動
   量に影響を与えます。

   no に指定した番号のパッド端子にマウスが接続されていない場合でも、マウスカー
   ソルの感度が変更されます。

   マウスの移動感度の変更が成功すると 0 が返されます。

   no に不正な値を指定した場合には -1 が返されます。

《関連事項》
   u_int mouse_getdt(int no);
   u_int mouse_curgt(int no);
   int mouse_curst(int posx,int posy,int no);

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

《著作権及び登録商標等》

・MOUSELIB.A 及び MOUSELIB.TXT（以下、"本ソフトウェア"という）は、
  ＰＣ−ＦＸＧＡ用のソフトウェア開発ツールの一部です。
  本ソフトウェアを、ＰＣ−ＦＸ、ＰＣ−ＦＸＧＡ用のソフトウェア開発以外の目的で
  使用しないで下さい。

・本ソフトウェアを使用した結果、直接及び間接的に生じた損害について、株式会社ハ
  ドソンは、一切の責任または債務を負わないものとします。

・本ソフトウェアの操作方法、技術的内容、その他の質問について、株式会社ハドソン
  では、直接お答えしていません。お問い合わせはご遠慮下さい。

・本ソフトウェアの使用に際し、「ソフトウェアのご使用条件」をよくご覧いただき、
  ご利用下さいますようお願い致します。

・本ソフトウェアの著作権は、株式会社ハドソンが保有しています。


MS-DOSは米国マイクロソフト社の登録商標です。
その他、記載されている会社名、製品名は、各社の登録商標または商標です。


                                                            (C)1996 HUDSON
